package st.gravel.support.compiler.ast;
/*
This file is automatically generated from typed smalltalk source. Do not edit by hand.
(C) AG5.com
*/
import java.math.BigInteger;
import st.gravel.support.jvm.NonLocalReturn;
import st.gravel.support.compiler.ast.SystemNode;
import st.gravel.support.compiler.ast.ClassDescriptionNode;
import st.gravel.support.compiler.ast.ClassNode;
import st.gravel.support.compiler.ast.MethodNode;
public class JavaTestcaseClassWriter extends Object implements Cloneable {
public static JavaTestcaseClassWriter_Factory factory = new JavaTestcaseClassWriter_Factory();
java.io.File _root;
SystemNode _systemNode;
public static class JavaTestcaseClassWriter_Factory extends st.gravel.support.jvm.SmalltalkFactory {
public JavaTestcaseClassWriter basicNew() {
JavaTestcaseClassWriter newInstance = new JavaTestcaseClassWriter();
newInstance.initialize();
return newInstance;
}
public JavaTestcaseClassWriter root_systemNode_(final java.io.File _anUnixFilename, final SystemNode _aSystemNode) {
return this.basicNew().initializeRoot_systemNode_(_anUnixFilename, _aSystemNode);
}
}
static public JavaTestcaseClassWriter _root_systemNode_(Object receiver, final java.io.File _anUnixFilename, final SystemNode _aSystemNode) {
return factory.root_systemNode_(_anUnixFilename, _aSystemNode);
}
public JavaTestcaseClassWriter copy() {
try {
JavaTestcaseClassWriter _temp1 = (JavaTestcaseClassWriter) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public JavaTestcaseClassWriter_Factory factory() {
return factory;
}
public JavaTestcaseClassWriter initialize() {
return this;
}
public JavaTestcaseClassWriter initializeRoot_systemNode_(final java.io.File _anUnixFilename, final SystemNode _aSystemNode) {
_root = _anUnixFilename;
_systemNode = _aSystemNode;
this.initialize();
return this;
}
public JavaTestcaseClassWriter postCopy() {
return this;
}
public java.io.File root() {
return _root;
}
public SystemNode systemNode() {
return _systemNode;
}
public JavaTestcaseClassWriter write() {
for (final ClassDescriptionNode _each : _systemNode.classDescriptionNodes().values()) {
if (_each.isSystemTest()) {
JavaTestcaseClassWriter.this.write_(((ClassNode) _each));
}
}
return this;
}
public JavaTestcaseClassWriter write_(final ClassNode _aClassNode) {
final MethodNode[] _testMethods;
final StringBuilder[] _wstr;
final String _className;
final java.io.File _dir;
_wstr = new StringBuilder[1];
_testMethods = st.gravel.support.jvm.ArrayExtensions.select_(_aClassNode.methods(), new st.gravel.support.jvm.Predicate1<MethodNode>() {
@Override
public boolean value_(final MethodNode _m) {
return _m.selector().startsWith("test");
}
});
if (_testMethods.length == 0) {
return JavaTestcaseClassWriter.this;
}
_className = _aClassNode.name().asString();
_dir = new java.io.File(new java.io.File(new java.io.File(_root, "st"), "gravel"), "systemtests");
_dir.mkdirs();
_wstr[0] = st.gravel.support.jvm.WriteStreamFactory.on_(new String());
_wstr[0].append("package st.gravel.systemtests;\n\nimport org.junit.Before;\nimport org.junit.Test;\n\nimport st.gravel.support.jvm.runtime.ImageBootstrapper;\nimport st.gravel.support.jvm.runtime.MethodTools;\n\npublic class ");
_wstr[0].append(_className);
_wstr[0].append(" {\n\t@Before\n\tpublic void setUp() {\n\t\tst.gravel.support.compiler.testtools.TestBootstrap.getSingleton();\n\t}\n");
for (final MethodNode _each : _testMethods) {
_wstr[0].append("\t@Test\n\tpublic void ");
_wstr[0].append(_each.selector());
_wstr[0].append("() throws Throwable {\n\t\tMethodTools.debugTest(\"");
_wstr[0].append(_aClassNode.reference().toString());
_wstr[0].append("\", \"");
_wstr[0].append(_each.selector());
_wstr[0].append("\");\n\t}\n");
}
_wstr[0].append("}");
st.gravel.support.jvm.StringExtensions.writeToFile_(_wstr[0].toString(), new java.io.File(_dir, _className + ".java"));
return this;
}
}